# @Time : 2020/6/29 9:51
# @Author : Fioman 
# @Phone : 13149920693
"""
正是因为有引用,对象才会在内存中存在.当对象的引用数量归零后,垃圾回收程序会把对象销毁.但是,有时需要引用对象,而不让对象的存在时间超过所需时间.
弱引用不会增加对象的引用数量.引用的目标对象称为所指对象(referent).因此我们说,弱引用不会反感所指对象被当作垃圾回收.
弱引用在缓存应用中很有用,因为我不想仅因为缓存引用着始终保存缓存对象.
"""
import weakref
a_set = {0,1}
wref = weakref.ref(a_set) # 创建一个弱引用对象wref
print("wref = {}".format(wref))

print("wref() = {}".format(wref())) # 调用wref()返回的是被引用的对象,{0,1}
a_set = {2,3,4} # a_set 不再指代{0,1}集合,因此集合的引用数量减少了.但是_变量仍然指代了它
print("wref() = {}".format(wref())) # 调用wref()依旧返回{0,1}
print("wref() is None : {}".format(wref() is None))# 计算这个表达式时,{0,1}存在,因此wref()不是None.但是随后_绑定到结果值False.现在{0,1}没有强引用了.
print("wref() is None : {}".format(wref() is None)) # 因为{0,1}对象不存在了,所以wref()返回None.



